#include "bsp_debug.h"
#include "stdio.h"


/* 初始化串口3 */
void bsp_debug_config(void)
{
	gpio_init_type gpio_init_struct;

	/* 时钟使能 */
	crm_periph_clock_enable(DEBUG_USART_CLK, TRUE);
	crm_periph_clock_enable(DEBUG_TX_GPIO_CLK, TRUE);
	crm_periph_clock_enable(DEBUG_RX_GPIO_CLK, TRUE);
	crm_periph_clock_enable(DEBUG_DE_GPIO_CLK, TRUE);

	/* 初始化GPIO */
	gpio_default_para_init(&gpio_init_struct);
	gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
	gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
	gpio_init_struct.gpio_pull = GPIO_PULL_NONE;

	gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
	
	gpio_init_struct.gpio_pins = DEBUG_DE_GPIO_PIN;
	gpio_init(DEBUG_DE_GPIO_PORT, &gpio_init_struct);
	
	gpio_init_struct.gpio_pins = DEBUG_TX_GPIO_PIN;
	gpio_init(DEBUG_TX_GPIO_PORT, &gpio_init_struct);
	
	gpio_init_struct.gpio_pins = DEBUG_RX_GPIO_PIN;
	gpio_init(DEBUG_RX_GPIO_PORT, &gpio_init_struct);

	gpio_pin_mux_config(DEBUG_DE_GPIO_PORT, DEBUG_DE_GPIO_PINS_SOURCE, DEBUG_DE_GPIO_MUX);
	gpio_pin_mux_config(DEBUG_TX_GPIO_PORT, DEBUG_TX_GPIO_PINS_SOURCE, DEBUG_TX_GPIO_MUX);
	gpio_pin_mux_config(DEBUG_RX_GPIO_PORT, DEBUG_RX_GPIO_PINS_SOURCE, DEBUG_RX_GPIO_MUX);

	/* 配置串口 */
	usart_rs485_delay_time_config(DEBUG_USARTx, 2, 2);
	usart_de_polarity_set(DEBUG_USARTx, USART_DE_POLARITY_HIGH); 			// 设置DE极性
	usart_rs485_mode_enable(DEBUG_USARTx, TRUE);							// 使能DE
	usart_init(DEBUG_USARTx, 1000000, USART_DATA_8BITS, USART_STOP_1_BIT);	// 初始化串口
	usart_transmitter_enable(DEBUG_USARTx, TRUE);							// 使能串口发送

	/* 交换管脚(如果改板需要删除此配置) */
	usart_transmit_receive_pin_swap(DEBUG_USARTx, TRUE);

	/* 使能串口 */
	usart_enable(DEBUG_USARTx, TRUE);
	
	
}

#if defined (__GNUC__) && !defined (__clang__)
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif

PUTCHAR_PROTOTYPE
{
  	usart_data_transmit(DEBUG_USARTx, ch);
  	while(usart_flag_get(DEBUG_USARTx, USART_TDBE_FLAG) == RESET);
  	return ch;
}

/*
 * 添加如下代码，则不需要在工程设置中勾选Use MicroLIB
*/

#pragma import(__use_no_semihosting)
 
struct __FILE
{
	int a;
};
 
FILE __stdout;
FILE __stdin;
void _sys_exit(int x)
{
	
}